<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Utilities
 *
 * @author yuriy
 */
class Shrinker_Model_Utilities {
    
    /**
     * Добавляет в БД длинную ссылку,
     * возвращает короткую
     *  @var string $longUrl
     * @return string $shortUrl
     */
    public static function short($longUrl){
        // Из регистра получаем Url нашего сайта
                if (!Zend_Registry::isRegistered('siteurl')) {
                throw new Zend_Controller_Action_Exception(
                    'siteurl Config not found in Registry'
                );
            }
        $siteurl = Zend_Registry::get('siteurl');
        
        //Массив для данных
        // Длинный Url
        $data['long_url'] = $longUrl;
        // Заголовок
        $data['title'] = '';
        // Тип рекламы 0 - без рекламы, 1 - показываем сайт, 2 - показываем баннер
        $data['adtype'] = 2;
        // id пользователя, который добавил ссылку
        $data['user'] = 0;
        // Создаем новый обьект таблицы links
        $link = new Shrinker_Model_Link();
        // Вставляем данные и получаем id вставленной записи
        $link->setFromArray($data);
        $lid = $link->save();
        $lidShort = $lid + 5000;
        // Генерируем короткую ссылку и присоеденяем Url нашего сайта
//	$shortUrl = $siteurl . $this->compressInt($lidShort);
	$shortUrl = $this->compressInt($lidShort);
        // Обновляем таблицу, добавляем в вставлнную запись сгенерированный Url
        $data2['short_url'] = $shortUrl;
        $linkManager = new Shrinker_Model_Link_Table();
        $where = 'id = ' . $lid;
        $linkManager->update($data2, $where);
                                
        return $siteurl . $shortUrl;
        

    }
    
    	/**
	 * Validate URL
	 *
	 * @param String $url  URL to validate
	 * @return Boolean
	 */
	public static function validateURL($url) {
		$urlregex = "/^(https?|ftp)\:\/\/"
					. "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"
					. "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*/i";
		if (!preg_match($urlregex, $url)) {
			return false;
		}
		$url = parse_url($url);
                return preg_match('/[^.]+\.[^.]+$/', $url['host'], $matches) ? $matches[0] : false;
        }
	    
    	/**
	 * Validate URL
	 *
	 * @param String $url  URL to validate
	 * @return array
	 */
	public static function fly($url) {

            $RET = array();
            
            // Создаем обьект менеджера всей таблицы links
            $linkManager = new Shrinker_Model_Link_Table();
            /**
             * Применяем "магический поиск"
             * если ничего не найдено @return false
             * @return Shrinker_Model_Link object
             */
            $linkRow = $linkManager->getByShort_url($url);
            
            // Если записи в БД нет - выходим из функции
            if(!$linkRow)
                return false;
        
            $RET['long_url'] = $linkRow->long_url;
            $RET['adtype'] = $linkRow->adtype;
            
            // Увеличиваем счетчик просмотров ссылки на 1
            $linkRow->views++;
            $linkRow->save();
            
            return $RET;
	}
    
    	/**
	 * Parse integer into compressed string
	 *
	 * @param Integer $int  Integer to compress
	 * @return String
	 */
        private static function compressInt($int) {
		$base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                $out = '';
        $len = strlen($base);
		while($int > $len - 1) {
			$out = $base[fmod($int, $len)] . $out;
			$int = floor($int / $len);
		}
		return $base[$int] . $out;
	 }
}

?>
